A day with (the) Julia (language)

Exercises

I. Escribir una función para convertir un archivo Stockholm en FASTA.

Pista: En un archivo con formato Stockholm, las secuencias son las únicas líneas que no comienzan con numeral #= ni //, la regex es: ^(?![#=|//])

O31699/88-139           EVMLTDIPRLHINDPIMKGFGMVINN..GFVCVENDE
#=GR O31699/88-139 AS   ________________*____________________
//

Usar: match, @r_str, open, eachline, close, println or print
Opcional: chomp


In [16]:
"""Función para convertir un archivo Stockholm en FASTA (secuencia en una sola línea).
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function stockholm2fasta(sto, fas)
    
    # COMPLETAR
    
end


Out[16]:
stockholm2fasta (generic function with 1 method)

In [43]:
?stockholm2fasta


search: 
Out[43]:

Función para convertir un archivo Stockholm en FASTA (secuencia en una sola línea). La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara. La función retorna la dirección/nombre del FASTA.

stockholm2fasta


In [44]:
"""Función para convertir un archivo Stockholm en FASTA (secuencia en una sola línea).
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function stockholm2fasta(sto, fas)
    fh_in  = open(sto, "r")
    open(fas, "w") do fh_out
        for line in eachline(fh_in)
            m = match(r"^(?![#=|//])(\S+)\s+(\S+)", line)
            if m != nothing
                println(fh_out, ">", m.captures[1], "\n", m.captures[2])
            end
        end
    end
    close(fh_in)
    fas
end


Out[44]:
stockholm2fasta (generic function with 1 method)

In [50]:
stockholm2fasta("data/PF09645_full.stockholm", "data/out.fas")


Out[50]:
"data/out.fas"

In [51]:
run(`cat ./data/out.fas`)


>C3N734_SULIY/1-95
...mp---NSYQMAEIMYKILQQKKEISLEDILAQFEISASTAYNVQRTLRMICEKHPDECEVQTKNRRTIFKWIKNEETTEEGQEE--QEIEKILNAQPAE-------------k....
>H2C869_9CREN/7-104
...nk--LNDVQRAKLLVKILQAKGELDVYDIMLQFEISYTRAIPIMKLTRKICEAQ-EICTYDEKEHKLVSLNAKKEKVEQDEEENEREEIEKILDAH----------------trreq
>Y070_ATV/2-70
qsvne-------VAQQLFSKLREKKEITAEDIIAIYNVTPSVAYAIFTVLKVMCQQHQGECQAIKRGRKTVI-------------------------------------------vskq.
>F112_SSV1/3-112
.....QTLNSYKMAEIMYKILEKKGELTLEDILAQFEISVPSAYNIQRALKAICERHPDECEVQYKNRKTTFKWIKQEQKEEQKQEQTQDNIAKIFDAQPANFEQTDQGFIKAKQ.....

II. Escribir una función para convertir un archivo Stockholm en FASTA usando BioPython

Usar PyCall para importar BioPython en Julia. Un ejemplo similar en (Bio)Python está al final de la wiki de AlignIO:

from Bio import AlignIO

input_handle = open("example.phy", "rU")
output_handle = open("example.sth", "w")

alignments = AlignIO.parse(input_handle, "phylip")
AlignIO.write(alignments, output_handle, "stockholm")

output_handle.close()
input_handle.close()

Usar: AlignIO.parse, AlignIO.write


In [63]:
using PyCall 

@pyimport Bio.AlignIO as AlignIO

"""Función para convertir un archivo Stockholm en FASTA usando BioPython.
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function py_stockholm2fasta(sto, fas)
    fh_in  = open(sto, "r")
    open(fas, "w") do fh_out
        
        # COMPLETAR
        
    end
    close(fh_in)
    fas
end


Out[63]:
py_stockholm2fasta (generic function with 1 method)

In [64]:
using PyCall 

@pyimport Bio.AlignIO as AlignIO

"""Función para convertir un archivo Stockholm en FASTA usando BioPython.
La función toma como argumentos la dirección/nombre de un archivo Stockholm y del archivo FASTA que se creara.
La función retorna la dirección/nombre del FASTA."""
function py_stockholm2fasta(sto, fas)
    fh_in  = open(sto, "r")
    open(fas, "w") do fh_out
        alignments = AlignIO.parse(fh_in, "stockholm")
        AlignIO.write(alignments, fh_out,"fasta")
    end
    close(fh_in)
    fas
end


Out[64]:
py_stockholm2fasta (generic function with 1 method)

In [65]:
py_stockholm2fasta("data/PF09645_full.stockholm", "data/py_out.fas")


Out[65]:
"data/py_out.fas"

In [66]:
run(`cat ./data/py_out.fas`)


>C3N734_SULIY/1-95
---mp---NSYQMAEIMYKILQQKKEISLEDILAQFEISASTAYNVQRTLRMICEKHPDE
CEVQTKNRRTIFKWIKNEETTEEGQEE--QEIEKILNAQPAE-------------k----
>H2C869_9CREN/7-104
---nk--LNDVQRAKLLVKILQAKGELDVYDIMLQFEISYTRAIPIMKLTRKICEAQ-EI
CTYDEKEHKLVSLNAKKEKVEQDEEENEREEIEKILDAH----------------trreq
>Y070_ATV/2-70
qsvne-------VAQQLFSKLREKKEITAEDIIAIYNVTPSVAYAIFTVLKVMCQQHQGE
CQAIKRGRKTVI-------------------------------------------vskq-
>F112_SSV1/3-112
-----QTLNSYKMAEIMYKILEKKGELTLEDILAQFEISVPSAYNIQRALKAICERHPDE
CEVQYKNRKTTFKWIKQEQKEEQKQEQTQDNIAKIFDAQPANFEQTDQGFIKAKQ-----